package com.utils.paragram;

import java.util.*;

/*
整数对最小和
题目描述

给定两个整数数组array1、array2，数组元素按升序排列。

假设从array1、array2中分别取出一个元素可构成一对元素，现在需要取出k对元素，

并对取出的所有元素求和，计算和的最小值。

注意：

两对元素如果对应于array1、array2中的两个下标均相同，则视为同一对元素。

输入描述

输入两行数组array1、array2，每行首个数字为数组大小size(0 < size <= 100);

0 < array1[i] <= 1000

0 < array2[i] <= 1000

接下来一行为正整数k

0 < k <= array1.size() * array2.size()

输出描述

满足要求的最小和

 */
public class One {

    public static int k=2;
    public static void main(String[] args) {

        int []a1={1,2,3,4};
        int []a2={9,2,4,6};

    System.out.println("最小和为"+minsum(a1,a2));

    }
    public static int minsum(int[]a1,int[]a2){
//       //给a1排序
//        for(int i=0;i<a1.length;i++){
//            for(int j=0;j<i;j++){
//                if(a1[i]<a1[j]){
//                    int b=a1[i];
//                    a1[i]=a1[j];
//                    a1[j]=b;
//                }
//
//            }
//        }
//
//        //给a2排序
//        for(int i=0;i<a2.length;i++){
//            for(int j=0;j<i;j++){
//                if(a2[i]<a2[j]){
//                    int b=a1[i];
//                    a1[i]=a1[j];
//                    a1[j]=b;
//                }
//
//            }
//        }
//
//        //自称集合
//        List<Integer>tempsum=new ArrayList<Integer>();
//        for(int i=0;i<a1.length;i++){
//           Integer s=  a1[i]+a2[i];
//            tempsum.add(s);
//        }
//        Integer sum=0;
//        for(int i=0;i<tempsum.size();i++){
//            sum=sum+tempsum.get(i);
//        }

        //以上全部错误，何故？
        // 应该求所有排列组合的和，而后排序取最小值
        List<Integer> pointSumList = new ArrayList<Integer>();

        for(int i=0;i<a1.length;i++){
            for(int j=0;i<a2.length;i++){
              int s=a1[i]+a2[j];
                pointSumList.add(s);

            }
        }
        //排大小
        pointSumList.sort((a, b) -> a - b);
        Integer sum=0;
      for(int i=0;i<k;i++){
            sum=sum+pointSumList.get(i);
        }
        return sum;
    }

}
